<?php
namespace app\api\controller;

use think\Controller;
use app\lib\exception\PremEx;
use app\api\service\Token;
use app\lib\enum\Scope;
/** 
* 控制器的基类
*/
class Base extends Controller {


    
    /**
     * 统一的数据返回格式
     *
     * @param mixed $data 返回的数据
     * @param string $msg 错误提示信息
     * @param integer $httpCode http状态吗
     * @param integer $errorCode 项目错误码
     * @return think\Response
     */
    public function data($data,$msg='成功',$httpCode=200,$errorCode=0){
        return json([
            'data' => $data,
            'msg' => $msg,
            'errorCode' => $errorCode
        ],$httpCode);
    }



    /* ---------------前置方法---------------- */
    
    /**
     * 检查权限大于普通用户身份
     *
     * @return boolean
     */
    protected function premGtUser(){
        $token = Token::getFromHttp();
        if(! $token) throw new PremEx('未携带Token',40003);
        $scope = Token::getCacheValue($token,'scope');
        if(empty($scope)) throw new PremEx('登陆超时',40001);
        if($scope < Scope::User) throw new PremEx('权限不足，需要普通用户权限',40005);
        return true;
    }

    /**
     * 检查权限仅仅限于普通用户
     *
     * @return boolean
     */
    protected function premOnlyUser(){
        $token = Token::getFromHttp();
        if(! $token) throw new PremEx('未携带Token',40003);
        $scope = Token::getCacheValue($token,'scope');
        if(empty($scope)) throw new PremEx('登陆超时',40001);
        if($scope != Scope::User) throw new PremEx('权限不足，仅限普通用户权限',40006);
        return true;
    }

}